home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
vb_g_prt
/
genprint.txt
< prev
next >
Wrap
Text File
|
1994-06-03
|
5KB
|
134 lines
GENPRINT - Generalized Printer for VB
by Guinn Unger
Unger Business Systems
11926 Barrett Brae
Houston, TX 77072-4004
Phone: (713) 498-8517 Fax: (713) 498-8518
Compuserve: Guinn Unger, 71053,2332
NOTE:
The GENPRINT setup routine was failing with a PostScript printer. It
turns out that the dmout.dmDriverExtra must be set to 0 for PS printers
to initialize. This change is hard-coded in the routine now.
(Note: There is the potential that this could cause problems with
printer drivers which use the private data area. This has not been
explored any further at this time.)
The GENPRINT forms and routines are designed to give the VB programmer
additional flexibility over using the VB PRINTER object. The primary
advantages are:
1. The ability to abort the print job. This is a significant
shortcoming of the VB PRINTER object in some situations.
2. The ability to select/change printers without changing the
Windows default printer. This includes changing the printer
orientation.
3. The ability to have more than one printer active.
GENPRINT consists of the following:
1. A form (GPRINTER.FRM) which acts as a dummy form and contains
the CBK.VBX custom control. This form is not actually necessary
if the appropriate controls are present on another form.
2. A form (ABORTFOR.FRM) which is displayed while printing is in
progress. It contains a command button which is pressed to abort
the print job.
3. A form (PRTSETUP.FRM) which mimics the dialog box used in
Microsoft Word.
4. A module (GPRINTER.BAS) which contains the various subs and
functions which are called by the user.
5. A custom callback control (CBK.VBX) which is necessary for
the abort function to work properly. This custom control was
supplied as part of Appleman's book and may be distributed
freely.
General Procedure for using GENPRINT
1. The functions are called as follows:
prhdc = GenPrinterSetup(ThisPrinter)
where prhdc is an integer which now contains the device
context for ThisPrinter. ThisPrinter is a string of the
form "HP LaserJet IIP,HPPCL,LPT1:" as stored in the
WIN.INI file. Note that prhdc is passed to virtually
all of the other GENPRINT routines. This routine as
written call DefaultFontSetup and uses "Ariel" font in
10 pt size.
SetupDocInfo ("PROGNAME")
This supplies the information used by Print Manager.
SetAbortCallback (prhdc)
This sets up the abort procedure.
ShowAbortForm (False) 'must not be system modal
This displays the abort form.
di = StartDocument(prhdc)
This tells Print Manager that we are starting a document.
di = StartAPage(prhdc)
Start a page!
PrintText prhdc, AString
{There are numerous other functions which can now be called to draw
lines, rectangles, etc. The font can also be changed. See the
GPRINTER.BAS module for available functions.}
di = EndAPage(prhdc)
This is called each time you want to end a page. If
more pages are to be printed, be sure to call StartAPage
again.
di = EndDocument(prhdc)
This tells Print Manager that the document is finished.
UnloadAbortForm
Get rid of the abort form.
GenPrinterClose prhdc
Clean up after printer. After this call prhdc is no
longer valid.
MISCELLANEOUS ROUTINES
The ClipString and SplitLines routines were developed to allow the
user to clip or split a text string which might be too long to fit in a
given space. The maximum length passed to each routine is in inches.
ClipString simply trims the string to the maximum number of characters which
will fit in the given length. Split lines parses the string into 3 separate
strings and throws away any extra. (The number of strings could be increased
easily.) Both routines take into account the current font size and other
characteristics.
OTHER INFORMATION
Several routines are included which show information about the
DevMode structure, printers, fonts, etc. Feel free to experiment
with these as you are using the routines.
These routines have primarily been tested with laser printers
(300 dpi). If you use them with other printers, be sure to test them
carefully. The routines seem to work fine with local and network printers.
If would be relatively easy to add additional functions to the
routines. See Appleman's book for more information.